4.5
推导输出为 o 的单个单元的梯度下降训练法则,其中
o=w0+w1x1+w1x12+⋯+wnxn+wnxn2
.
我们怎样才能计算出沿着误差曲面最陡峭下降的方向呢?可以通过计算 E 相对向量 w 的每个分量的导数来得到这个方向。
其中 E(w)=21∑d∈D(td−od)2。
这个向量导数被称为 E 对于 w 的梯度,记作 ▽E(w)。
▽E(w)≡[∂w0∂E,∂w1∂E,…,∂wn∂E]
当梯度被解释为权空间的一个向量时,它确定了使 E 最陡峭上升的方向。所以这个向量的反方向给出了最陡峭下降的方向。
既然梯度确定了 E 最陡峭上升的方向,那么梯度下降的训练法则是:
w←w+Δw
其中:
Δw=−η▽E(w)
这里 η 是一个正的常数叫做学习速率,它决定梯度下降搜索中的步长。公式中的负号是因为我们想让权向量向 E 下降的方向移动。这个训练法则也可以写成它的分量形式:
wi←wi+Δwi
其中:
Δwi=−η∂wi∂E(1)
这样很清楚,最陡峭的下降可以按照比例 ∂wi∂E 改变 w 中的每一个分量wi来实现。
要形成一个根据公式(1)迭代更新权值的实用算法,我们需要一个高效的方法在每一步都计算这个梯度,得到组成这个梯度向量的分量∂wi∂E的过程如下:
∂wi∂E=∂wi∂21d∈D∑(td−od)2=21d∈D∑∂wi∂(td−od)2=21d∈D∑2(td−od)∂wi∂(td−od)=d∈D∑(td−od)∂wi∂(td−(w0+w1x1d+w1x1d2+⋯+wnxnd+wnxnd2))=d∈D∑(td−od)(∂wi∂td−∂wi∂(w0+w1x1d+w1x1d2+⋯+wnxnd+wnxnd2))=d∈D∑(td−od)(0−∂wi∂(wixid+wixid2))∂wi∂E=d∈D∑(td−od)(−xid−xid2)=d∈D∑(td−od)(−xid)(1+xid)(2)
其中,xid 表示训练样例d的一个输入分量xi。现在我们有了一个公式,能够用线性单元的输入 xid 、输出od以及训练样例的目标值 td 表示 ∂wi∂E。把公式(2)代入公式(1)便得到了梯度下降权值更新法则。
Δwi=ηd∈D∑(td−od)xid(1+xid)(3)
总而言之,训练单个单元的梯度下降算法如下:选取一个初始的随机权向量;应用单个单元到所有的训练样例,然后根据公式(3)计算每个权值的 Δwi;通过加上Δwi来更新每个权值,然后重复这个过程。
因为误差曲面仅包含一个全局的最小值,所以无论训练样例是否线性可分,这个算法会收敛到具有最小误差的权向量,条件是必须使用一个足够小的学习速率 η。如果η太大,梯度下降搜索就有越过误差曲面最小值而不是停留在那一点的危险。因此,对此算法的一种常用的改进方法是随着梯度下降步数的增加逐渐减小 η的值。
这个训练法则的实现详见代码:https://github.com/Jeff-Tian/perceptron/commit/7129ef7fd27a44a25f179442471076e7d8dc2c8d#diff-51309ec726b9ebb0b1e4b5eb838ce31e5cb5812c5b25dadbb9d7e8ece84c0e6f